package Test_1029;

import java.util.Arrays;

/**
 * Created with Intellij IDEA
 * Description:
 * User: 星辰
 * Dare: 2024-10-29
 * Time: 21:59
 */
public class MyArrayList implements IList {
   //数组：
    public int[] array;
   //数组已使用大小
    public int usedsize;
    //数组默认大小：
    public static final int DEFAULT_CAPACITY=10;

    public MyArrayList() {
        this.array = new int[DEFAULT_CAPACITY];
    }
    public boolean isFull(){
        return this.usedsize==DEFAULT_CAPACITY;
    }
    //私有的，自己用用private
    public void grows(){
        this.array= Arrays.copyOf(this.array,
                2*this.array.length);
    }
    /* 1.增加元素：
            1.注意是否满了*/
    @Override
    public void add(int num) {
        //如果满了，扩容
        if(isFull()){
            grows();
        }
        array[usedsize]=num;
        usedsize++;
    }
    public void checkPos(int pos) throws PosIlleagal{
        if(pos<0 || pos>usedsize){
            throw new PosIlleagal("Pos为位置不合法！！！");
        }
    }
   /* 2.插入:
      1.下标要大于0，小于等于usedsize
      2.是否忙了*/
    @Override
    public void add(int pos, int num) {
       if (isFull()){
           grows();
        }
       try {
           checkPos(pos);
           for (int i = usedsize-1; i >=pos ; i--) {
               array[i]=array[i-1];
           }
           array[pos]=num;
           usedsize++;
       }catch (PosIlleagal e){
           System.out.println("pos位置不合法");
           e.printStackTrace();
       }

    }
    public void checkPos2(int pos) throws PosIlleagal{
        if(pos<0 || pos>=usedsize){
            throw new PosIlleagal("Pos为位置不合法！！！");
        }
    }
    public boolean isEmpty(){
        return usedsize==0;
    }
    //
/*移除：
    是否为空
    1.下标是否合法；
    3.从前往后加
    2.usedsize移除减*/
    @Override
    public void remove(int toRemove) {
        if(isEmpty()){
             throw new EmptyException("顺序表为空");
        }
        try {
            checkPos2(toRemove);
            for (int i = toRemove; i <usedsize ; i++) {
                array[i]=array[i+1];
            }
            usedsize--;
        }catch (PosIlleagal e){
            System.out.println("pos位置不合法");
            e.printStackTrace();
        }
    }

    @Override
    public void clear() {

    }

    @Override
    public void replace(int pos, int value) {

    }
//查找：
    //1.是否包含：

    @Override
    public boolean contains(int toFind) {
        return false;
    }

    @Override
    public int find(int toFind) {
        return 0;
    }

    @Override
    public int indexOf(int toFind) {
        for (int i = 0; i < usedsize; i++) {
            if(array[i]==toFind){
                return i;
            }
        }
        return -1;
    }

    @Override
    public void display() {

    }

    @Override
    public int size() {
        return 0;
    }
}
